DevOps の第 2 の道 : フィードバックの原則
バリューストリームの全てのステージで、右から左にコンスタントにフィードバックを返せるようにすること システム全体を把握して全ての部品がどのように関連しているか誰にも理解できない
同じことを 2 度しても、必ずしも同じ結果にはならない
複雑なシステムではエラーは必然で不可避 → 生産でも IT でも破滅的な悪影響のはるか手前で障害を発見できる自信が必要 1. 設計や運用の問題が明らかになるように複雑な仕事を管理する
2. 問題が発生したときに組織一丸で解決にあたり、新しい知識を素早く構築する
何か問題が起きた時に周りの作業を止める文化を作ることが大事
3. 組織の一部が獲得した局所的な知識を、組織全体で活用する
4. リーダーが、この種の能力を継続的に成長させていくような人を次のリーダーとして育てていく
上流での品質確保の追求
全ての人が品質に責任を持つように
4 部 第 2 の道 : フィードバックの技術的実践
14 章 問題の可視化と解決のための基礎となる遠隔測定データを作り出す
遠隔測定
開発は開発者が関心をもつイベントだけロギングし、運用は環境が落ちていないかどうかしか監視しない
システムが全体としてどう振る舞っているかを十分に理解できるだけの遠隔測定データを生成する必要がある
遠隔測定データを簡単に作れるインフラストラクチャとライブラリを用意する (日常的に指標を簡単に作成できるように)
情報ラジエーター : 遠隔測定データの可視性を高める (開発や運用の作業空間の中心に表示して、サービスがどのように実行されているかを全員がみられるように) 遠隔測定の穴があると、インシデントの発見が遅れる
あらゆるレベルに十分な遠隔測定手段を張り巡らせる必要
ビジネスレベル : 売買取引の数や解約率、A/B テストの結果など
アプリケーションレベル : トランザクション数、ユーザー数、アプリケーションエラーなど
インフラストラクチャレベル : サーバーのトラフィック、CPU 負荷、ディスク利用状況など
クライアントソフトウェアレベル : アプリケーションのエラー、クラッシュ、ユーザーが測定したトランザクション数など
デプロイパイプラインレベル : ビルドパイプラインのステータス、デプロイリードタイム、デプロイの頻度など
ビジネスの指標とアプリケーションやインフラストラクチャの指標を並べてグラフを描くことで、何が起きているか理解しやすくなる
ビジネス指標はインフラストラクチャ指標のコンテキストを生み出すので、開発と運用が協力しやすくなる
運用がダウンタイムを計測するのではなく、開発と運用でダウンタイムがビジネスにどう影響を与えたかを測定する
本番だけでなく、本番より前の環境での (開発環境や、テストやステージング環境) 遠隔測定データも必要
システム変更には本質的にリスクがある → グラフに本番デプロイの全ての工程を重ね合わせて表示すべし
15 章 遠隔測定データを分析して問題の予測と目標の達成に活かす
アラートを上げる際にどんな指標を見るべきか? → 実際に起こった障害に対して、どの指標を見ていれば事前検知できたか?
運用では、多くのデータセットがカイ二乗分布と呼ばれる分布になる ユーザーデータに関する遠隔測定の大部分は周期的だったり季節的な類似性がある 16 章 フィードバックループを実現して開発と運用が安全にコードをデプロイできるようにする
バリューストリームの上流が自部門の都合で動くとバリューストリーム全体のパフォーマンスを低下させうる (例 : インシデント)
運用上のインシデントの処理を、バリューストリーム全体で共有する
開発者、開発マネジャー、アーキテクトもオンコールに参加させる 開発者に、下流の様子を観察させる
17 章 日常業務に仮説駆動開発と A/B テストを組み込む
機能を作っては作りっぱなしで、効果を検証しないことが多い
機能を作る前に、本当に作るべきかを深く考えるべき
実験的なアプローチのために、仕事を小さなユニットに分割するだけでなく、それぞれのユニットが期待された結果を生み出すかどうかをチェックする必要
18 章 レビューと調整プロセスによって現在の仕事の品質を上げる
詳細を見ようとすると時間がかかりすぎるし、概要把握だけではほぼ効果がない